#ifndef __BSP_SYSTEM_H
#define __BSP_SYSTEM_H
/*系统头文件包含*/
#include "main.h"
#include "stdio.h"
#include "stdint.h"
#include "string.h"
#include "stdarg.h"
#include "stdbool.h"
/*组件头文件包含*/
#include "u8g2.h"
#include "arm_math.h"
// 波形类型枚举



// 信号测量数据结构
typedef struct {
    float frequency;        // 频率 (Hz)
    float peak_to_peak;     // 峰峰值 (V)
    float main_freq;        // 主频 (Hz)
    float main_amplitude;   // 主频幅度 (V)
    uint16_t sample_count;  // 采样点数量
    uint32_t *sample_data;   // 时域采样数据指针
    float sample_rate;      // 采样率 (Hz)
} signal_data_t;

// 显示配置结构
typedef struct {
    float voltage_scale;    // 电压刻度 (V/div)
    float time_scale;       // 时间刻度 (s/div)
    uint8_t wave_thickness; // 波形线条粗细
    bool auto_scale;        // 自动缩放开关
} display_config_t;

// 波形绘制上下文
typedef struct {
    u8g2_t *u8g2;          // u8g2显示器句柄
    signal_data_t *signal; // 信号数据指针
    display_config_t config; // 显示配置
    uint16_t display_points; // 实际显示的点数
    float x_scale;         // X轴缩放系数
    float y_scale;         // Y轴缩放系数
    int16_t center_y;      // Y轴中心位置
} wave_display_t;
/*用户自定义数据*/
//信号采样点数
#define BUFFER_SIZE 1024//缓冲区大小
//波形类型枚举
typedef enum {
    SIGNAL_TYPE_SINE = 0,      // 正弦波
    SIGNAL_TYPE_SQUARE,        // 方波
    SIGNAL_TYPE_TRIANGLE,      // 三角波
    SIGNAL_TYPE_SAWTOOTH,      // 锯齿波
    SIGNAL_TYPE_UNKNOWN        // 未知波形
} signal_type_t;
//信号数据结构体
typedef struct{
    /* data */
    //时域测量
    float wave_freq;//信号频率(时域)
    float wave_peak;//峰峰值
    //频域测量
    float wave_amplitude;//主频幅值
    float wave_freq_f;//信号频率(频域)

    signal_type_t wave_type;
}wave_t;
/*用户自定义头文件包含*/
#include "user_scheduler.h"
#include "u8g2_oled_driver.h"
#include "u8g2_oled_init.h"
#include "user_wavedat.h"
#include "user_adc.h"
#include "user_uart.h"
#include "user_draw_wave.h"
#include "user_test_draw.h"
/*用户外部引用*/
extern SPI_HandleTypeDef hspi1;
extern u8g2_t u8g2;
extern ADC_HandleTypeDef hadc1;
extern ADC_HandleTypeDef hadc2;
extern DMA_HandleTypeDef hdma_adc1;
extern DMA_HandleTypeDef hdma_adc2;
extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;
extern UART_HandleTypeDef huart1;
extern DMA_HandleTypeDef hdma_usart1_rx;

extern uint32_t SAMPLE_RATE;        // 采样频率 40kHz
extern uint8_t tim_change_flag;
extern float fft_output[BUFFER_SIZE];//FFT 输出数据存储数组
extern uint8_t user_switch;
extern uint16_t time_set;
//高频通道专用FFT数组
extern float fft_input[BUFFER_SIZE * 2];//FFT 输入数据存储数组
extern float fft_output[BUFFER_SIZE];//FFT 输出数据存储数组
//低频通道专用FFT数组
extern float fft_input_1[BUFFER_SIZE * 2];//FFT 输入数据存储数组
extern float fft_output_1[BUFFER_SIZE];//FFT 输出数据存储数组
#endif